package simpleFactory;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 简单工厂模式
 * 简单工厂模式属于创建型模式，又叫做静态工厂方法（Static Factory Method）模式，是由一个工厂对象决定创建出哪一种产品类的实例。
 * 因为上一个写的是抽象工厂，与这个相比，这个确实简单，所以叫简单工厂模式
 */
public class simpleFactoryMain {

    /**
     * 使用场景
     * 最重要的知识点，这是最重要的知识点，这是最重要的知识点！
     *
     * 首先当然是在你需要new一个类的对象的时候，此时各种状况出现啦：
     *
     * 你不想直接new这个类的对象，怕以后这个类改变的时候你需要回来改代码，而此时依赖这个类的地方已经到处都是了。
     * 这个类的对象构建过程非常复杂，你不愿意将这么复杂的构建过程一遍又一遍的写在需要用到此对象的地方。
     * 这个类的对象在构建过程中依赖了很多其他的类，而你无法在调用的地方提供。
     *
     * 总的来说，就是想要统一的来更改这个对象
     *
     * 优点：不直接在客户端创建具体产品的实例，降低了耦合性。
     * 缺点：违反了开闭原则，（对扩展开放，对修改关闭），不容易形成高内聚松耦合结构。
     * 每当我们增加一种产品的时候就要去修改工厂方法，这样会破坏其内聚性，给维护带来额外开支。
     *
     * 为了克服简单工厂方法模式的缺点，工厂模式就被提了出来
     *
     * 业务场景
     * 假设我们现在要生产多种牌子的笔记本电脑，例如要生产小米笔记本电脑和苹果笔记本电脑，那我们如何用代码实现这个业务呢？
     */
    public static void main(String[] args) throws ParseException {
        // 测试一下
        // Computer miComputer = SimpleComputerFactory.makeSystem("mi");
        // miComputer.setSystem();
        //
        // Computer macComputer = SimpleComputerFactory.makeSystem("apple");
        // macComputer.setSystem();
        //
        // Computer computer1 = SimpleComputerFactory.makeSystem("hahah");
        // computer1.setSystem();

        // String str = "              hahhaha  "; // 去半角全交空格
        //
        //         String s = str.replaceAll("\\u00A0+", " ");
        //         s = s.replaceAll("(^\\s+)|(\\s+$)","");
        //         System.out.println(s);

            String s = "2022-04-6 23:05:40";
            int i = getDayDiffer(s);
            System.out.println(i);

    }

    // 判断当前合同是否过了签署有效期 与当前时间比较是否大于30天
    public static  int getDayDiffer(String startDate) throws ParseException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        Date newTime = dateFormat.parse(startDate);

        long startDateTime = dateFormat.parse(dateFormat.format(newTime)).getTime();
        long endDateTime = dateFormat.parse(dateFormat.format(new Date())).getTime();
        return (int) ((endDateTime - startDateTime) / (1000 * 3600 * 24));
    }




}
